package thread.sync;

//이 순서를 잘 분석해서 그림으로 그려보자.
//LockPool 이 어느 공간인지 알아보자.
//스레드가 어디에 들어갔다가 어디로 나가는지 공부해야 한다.


/*
 * 공유 데이터의 동기화
 * 1. 공유 데이터는 private으로 해서 직접 접근을 막는다.
 * 2. 공유 데이터에 접근해서 일하는 코드는 동기화 블럭으로 처리한다. 
 */

public class MakeSequenceNumber {
	//호출시마다 1씩 증가하는 숫자를 return하는 메소드
	private int num;
	
	public int getNextNumber(){
		
		//싱크로나이즈드(객체 A){//블락}
		//block 내의 코드를 실행하기 위해서는 Thread가 객체 A의 lock Flag를 얻어야 한다. 
		
		synchronized (this) {
			
		num +=1;
		
		try {
			Thread.sleep(10);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		}
		return num;
	}
}
